import {Http} from "./http"
class Paging{
  page;
  req;
  url;
  isLogin;
  count;
  locker=false;
  moreData=true;
  accoumulator=[];
  /*
  * req对象接收参数表
  *   {
  *       url:"",     // 请求地址
  *       isLogin:""  // 是否需要登录
  *       list:""     // 获取的数据对象名字 例如后端传输过来的是这样的  {data:{ first:[{},{}]  }},这个时候就需要把list设置成first这个key，分页类就方便获取了
  *   }
  *
  * */

  //构造函数
  constructor(req,page=1,count=10,){
      this.req=req;
      this.url=req.url;
      this.page=page;   // 页码
      this.count=count; // 一页多少数据
      this.isLogin=req.isLogin; // 是否需要登录
  }
  //获取更多数据
  async getMoreData(){
      if(!this._getLocker()){
        return
      }
     if(this.moreData){
       const data=await this._actualGetData();
       this._releseLocker();
       return data;
     }
     return;
  }
  async _actualGetData(){
    let req = this._getCurrentReq();
    let paging=null;
    if(this.isLogin){
      paging=await Http.tSend(req);
    }else{
      paging=await Http.request(req);
    }
    if(!paging){
      return null;
    }
    console.log(paging);
    if(paging[this.req.list].length===0){
      return {
        empty:true,
        moreData:false,
        items:[],
        accoumulator:[]
      }
    }
    this.moreData=paging[this.req.list].length==this.count;
    console.log(this.moreData,paging[this.req.list].length,this.count)
    if(this.moreData){
      this.page+=1;
    }
    this._accumulate(paging[this.req.list])
    return {
      empty:false,
      items:paging[this.req.list],
      moreData:this.moreData,
      accoumulator:this.accoumulator
    }
  }
  //累加数据
  _accumulate(items){
    this.accoumulator=this.accoumulator.concat(items);
  }
  //查看是否有更多的数据
  static _moreData(total_page,page){
    return page<total_page-1;
  }
  //获取请求连接
  _getCurrentReq(){
    let url = this.url;
    const params=`page=${this.page}`;
    if(url.indexOf('?')==-1){
      url=this.url+'?'+params;
    }else{
      url=this.url+'&'+params;
    }
    this.req.url=url;
    return this.req;
  }
  //构建锁
  _getLocker(){
    if(this.locker){
        return false;
    }
    this.locker=true;
    return true;
  }
  //重置锁
  _releseLocker(){
      this.locker=false;
  }
}
export{
  Paging
}
